package com.ce.pms.customer.dao;

import java.util.List;

import com.ce.pms.base.dao.IPmsBaseDao;
import com.ce.pms.common.annotation.AssociatedBuildingQuery;
import com.ce.pms.customer.model.ClientDO;
import com.ce.pms.customer.model.IndividualDO;
import com.ce.pms.customer.model.OrganizationDO;
import com.ce.pms.customer.model.ParticipantDO;
import com.ce.pms.customer.vo.CustSearchVO;
import com.ce.pms.customer.vo.MoveVO;
import com.sitechasia.webx.core.support.Page;
/**
* 功能描述:
* <p>版权所有：中企动力
* <p>未经本公司许可，不得以任何方式复制或使用本程序任何部分
*
* @author  付湘辉
* Created on  2008-05-22
*/
public interface ICustomerDao extends IPmsBaseDao<ParticipantDO> {

	/**
	 * 功能描述:居住历史查询。如要用按房号查询，因考虑到有管理房和产权房，故先调用方法查询出该房号的ID<br>
	 * @param vo
	 * @param pageNo
	 * @param pageSize
	 * @return<br>
	 * Create author:罗军林<br>
	 * Create on:2008-10-21<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public Page queryHisResidents(CustSearchVO vo, Integer pageNO, Integer pageSize);


	/**
	 * Function:根据参与人的id查询客户实体
	 * @param
	 * @return
	 * Create author:xuhaidui
	 * Create on:2008-5-27
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public ClientDO queryClientByParticipantId(final String hql,Long participantId);

	/**
	 * @param custResidentVO
	 * @param pageNo
	 * @param pageSize
	 * @param sortStr
	 * @return page
	 * @roseuid 4833C563009C
	 */
	public Page queryResidentInfo(CustSearchVO vo,
			Integer pageNo, Integer pageSize);

	/**
	 * 功能描述：居住用户查询。如要用按房号查询，因考虑到有管理房和产权房，
	 * 故先调用方法查询出该房号的ID<br>
	 * @param vo
	 * @param pageNo
	 * @param pageSize
	 * @return<br>
	 * Create author:罗军林<br>
	 * Create on:2008-10-21<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public List<Object[]> queryResidentInfo(CustSearchVO vo);

	/**
	 * 1.个人业主或租户
	 * ClientRHouseDO，ClientDO，HouseDO,IndividualDO
	 * 2.企业业主或租户
	 * ClientRHouseDO，ClientDO，HouseDO,OrganizationDO,ParticipantRelationDO(法人代表),RelationTypeDO,IndividualDO
	 * 3.家庭成员
	 * 1或2的ClientDO-->ParticipantDO-->ParticipantRelationDO(家庭成员)-->IndividualDO(查出相应的名称)
	 *
	 * union 1,2,3并做为最后的结果
	 * @param vo
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	public Page queryCustomerInfo(CustSearchVO vo, Integer pageNo, Integer pageSize);

	/**
	 * Function:根据证件类型ID和证件号码查询参与人信息。<br>
	 * 			将会查询这三个表：CS_PARTICIPANT,CS_INDIVIDUAL,CS_ID_TYPE<br>
	 * 			业务上决定这两个条件决定数据的唯一性。如果数据不存在或者不止一个或者出现异常都将返回null<br>
	 * @param idTypeId
	 * @param idNO
	 * @return
	 * Create author:罗军林
	 * Create on:2008-5-30
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public IndividualDO queryParticipant(String idTypeId,String idNO);

	/**
	 * Function:根据企业名称查询企业信息。<br>
	 * 			将会查询这两个表：CS_PARTICIPANT,CS_ORGANIZATION<br>
	 * 			业务上决定企业名称数据的唯一性。如果数据不存在或者不止一个或者出现异常都将返回null<br>
	 * @param participantName
	 * @return
	 * Create author:罗军林
	 * Create on:2008-5-30
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public OrganizationDO queryOrganizationByName(String participantName);
}
